﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace IceDog.EFCore.ContosoUniversity.Models
{
    /// <summary>
    /// 系别模型
    /// </summary>
    public class Department
    {
        public int DepartmentID { get; set; }

        [StringLength(50, MinimumLength = 3)]
        public string Name { get; set; }
        /// <summary>
        /// 预算
        /// </summary>
        [DataType(DataType.Currency)]
        [Column(TypeName = "money")]
        public decimal Budget { get; set; }
        /// <summary>
        /// 开始日期
        /// </summary>
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Start Date")]
        public DateTime StartDate { get; set; }
        //按照约定，EF Core 能针对不可为 NULL 的 FK 和多对多关系启用级联删除。 
        //级联删除可能导致形成循环级联删除规则。 循环级联删除规则会在添加迁移时引发异常。
        //例如，如果未将 Department.InstructorID 属性定义为可以为 NULL：
        //- EF Core 会配置将在删除系时删除讲师的级联删除规则。
        //- 在删除系时删除讲师并不是预期行为。
        //如果业务规则要求 InstructorID 属性不可为 NULL，请使用以下 Fluent API 语句：
        //modelBuilder.Entity<Department>()
        //   .HasOne(d => d.Administrator)
        //   .WithMany()
        //   .OnDelete(DeleteBehavior.Restrict)
        //上面的代码会针对“系-讲师”关系禁用级联删除。
        public int? InstructorID { get; set; }

        [Timestamp]
        public byte[] RowVersion { get; set; }

        public Instructor Administrator { get; set; }
        public ICollection<Course> Courses { get; set; }
    }
}